package com.qf.service;

import com.qf.dao.UserMapper;
import com.qf.entity.MyUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.bcrypt.BCrypt;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserDetailsService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        //根据用户名，去查询数据库
        MyUser myUser = userMapper.findByUsername(username);


        /*
            authorities和roles都是在给这个用户设置角色
            authorities设置角色时，角色前面必须带上ROLE_角色名,比如角色是P1，使用这个方法 authorities("ROLE_P1")
            roles设置角色时，橘色前面不允许带ROLE_,比如角色是P1,使用这个方法roles("P1")

            实际开发时，如果表中的数据存储的角色是 ROLE_A ,ROLE_B，使用authorities
            实际开发时，如果表中的数据存储的角色是 A ,B，使用roles
         */
        return User
                .withUsername(myUser.getUsername())
                .password(myUser.getPassword())
                .authorities("a") //这个User对象构建过程中，authorities方法要求必须调用，而且必须给值
                .roles(myUser.getRole())
                .build();
    }

    public static void main(String[] args) {
//        BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
//
//        String encode = bCryptPasswordEncoder.encode("123");
//        System.out.println(encode);
//
//        String ss = "123";
//        String salt = "sdjgslgsg"; //加盐
//        //sdj12lgs3 --> 加密

        String hashpw = BCrypt.hashpw("456", BCrypt.gensalt());
        System.out.println(hashpw);

    }
}
// $2a$10$MLEPmsGvKiG.tEvT4fXmgukvnXSKyOvX91yRT8/KIfAT/jh5VwiVO
// $2a$10$mc.xosANHdSTGSG8ztMdHO5Cv/jEn5Wek09sVejbkBsAhqe6XSzGO